<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>reduce</title>
		<script>
			/**
			 * reduce(callback,[initialValue]) 方法对数组中的每个元素按序执行一个由您提供的 reducer 函数，
			 * 每一次运行 reducer 会将先前元素的计算结果作为参数传入，最后将其结果汇总为单个返回值。
			 * 第一次执行回调函数时，不存在“上一次的计算结果”。如果需要回调函数从数组索引为 0 的元素开始执行，
			 * 则需要传递初始值。否则，数组索引为 0 的元素将被作为初始值 initialValue，
			 * 迭代器将从第二个元素开始执行（索引为 1 而不是 0）。
			 * initialValue:作为第一次调用 callback 函数时参数 previousValue 的值。
			 *  若指定了初始值 initialValue，则 currentValue 则将使用数组第一个元素；
			 *  否则 previousValue 将使用数组第一个元素，而 currentValue 将使用数组第二个元素。
			 * 返回值:使用“reducer”回调函数遍历整个数组后的结果。
			 */

			const array = [1, 2, 3];
			// array.reduce((previousValue, currentValue, currentIndex, array) => {
			//   /**
			//    * previousValue：上一次调用 callbackFn 时的返回值。在第一次调用时，若指定了初始值 initialValue，其值则为 initialValue，否则为数组索引为 0 的元素 array[0]。
			//    * currentValue：数组中正在处理的元素。在第一次调用时，若指定了初始值 initialValue，其值则为数组索引为 0 的元素 array[0]，否则为 array[1]。
			//    * currentIndex：数组中正在处理的元素的索引。若指定了初始值 initialValue，则起始索引号为 0，否则从索引 1 起始。
			//    * array：用于遍历的数组。
			//    */
			// }, initialValue)

			const array2 = array.reduce((per, current, currentIndex, array) => {
				console.log(per);
				console.log(current);
				return per + currentIndex;
			});

			console.log('array2 --->', array2); // 6
		</script>
	</head>

	<body></body>
</html>
